// Sets default values AMyActor::AMyActor() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true; }
// Called when the game starts or when spawned voidAMyActor::BeginPlay() { Super::BeginPlay(); }
// Called every frame voidAMyActor::Tick(float DeltaTime) { Super::Tick(DeltaTime); }
派生自 Actor 的类带有 A 前缀,如 AController。
派生自 Object 的类带有 U 前缀,如 UComponent。
Enums 的前缀是 E,如 EFortificationType。
Interface 的前缀通常是 I,如 lAbilitySystemInterface。
Template 的前缀是 T,如 TArray。
派生自 SWidget 的类 (Slate Ul) 带有前缀 S,如 SButton。
其他类的前缀为字母 F,如 FVector。
看一看 MyActor.h 里的内容,虽然 UCLASS() 没有 Blueprintable,但是也可以执行 Create Blueprint class based on MyObject,这是因为所继承的类 AActor 自带 Blueprintable:
UCLASS() classMYPROJECT8_API AMyActor : public AActor { GENERATED_BODY()
public: // Sets default values for this actor's properties AMyActor();
UPROPERTY(VisibleAnywhere, Category = "My Actor Components") UStaticMeshComponent* MyStaticMesh;
protected: // Called when the game starts or when spawned virtualvoidBeginPlay()override;
public: // Called every frame virtualvoidTick(float DeltaTime)override; };
编辑 MyActor.cpp 里的内容,在构造函数里设置 MyStaticMesh 里的值:
#include"MyActor.h"
// Sets default values AMyActor::AMyActor() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true;
UCLASS() classMYPROJECT8_API AMyActor : public AActor { GENERATED_BODY()
public: // Sets default values for this actor's properties AMyActor();
UPROPERTY(VisibleAnywhere, Category = "My Actor Components") UStaticMeshComponent* MyStaticMesh;
UPROPERTY(EditInstanceOnly, Category = "My Actor Properties | Vector") FVector InitLocation;
protected: // Called when the game starts or when spawned virtualvoidBeginPlay()override;
public: // Called every frame virtualvoidTick(float DeltaTime)override; };
修改 MyActor.cpp 里的内容,在 BeginPlay() 中将 Actor 的坐标设为 InitLocation 的值。
#include"MyActor.h"
// Sets default values AMyActor::AMyActor() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true;
UCLASS() classMYPROJECT8_API AMyActor : public AActor { GENERATED_BODY()
public: // Sets default values for this actor's properties AMyActor();
UPROPERTY(VisibleAnywhere, Category = "My Actor Components") UStaticMeshComponent* MyStaticMesh;
UPROPERTY(EditInstanceOnly, Category = "My Actor Properties | Vector") FVector InitLocation;
UPROPERTY(VisibleInstanceOnly, Category = "My Actor Properties | Vector") FVector PlacedLocation;
UPROPERTY(EditDefaultsOnly, Category = "My Actor Properties | Vector") bool bGotoInitLocation;
protected: // Called when the game starts or when spawned virtualvoidBeginPlay()override;
public: // Called every frame virtualvoidTick(float DeltaTime)override; };
修改 MyActor.cpp 里的内容:
#include"MyActor.h"
// Sets default values AMyActor::AMyActor() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true;
UCLASS() classMYPROJECT8_API AMyActor : public AActor { GENERATED_BODY()
public: // Sets default values for this actor's properties AMyActor();
UPROPERTY(VisibleAnywhere, Category = "My Actor Components") UStaticMeshComponent* MyStaticMesh;
UPROPERTY(EditInstanceOnly, Category = "My Actor Properties | Vector") FVector InitLocation;
UPROPERTY(VisibleInstanceOnly, Category = "My Actor Properties | Vector") FVector PlacedLocation;
UPROPERTY(EditDefaultsOnly, Category = "My Actor Properties | Vector") bool bGotoInitLocation;
UPROPERTY(VisibleDefaultsOnly, Category = "My Actor Properties | Vector") FVector WorldOrigin;
UPROPERTY(EditAnywhere, Category = "My Actor Properties | Vector") FVector TickLoactionOffset;
UPROPERTY(EditAnywhere, Category = "My Actor Properties | Vector") bool bShouldMove;
protected: // Called when the game starts or when spawned virtualvoidBeginPlay()override;
public: // Called every frame virtualvoidTick(float DeltaTime)override; };
修改 MyActor.cpp 里的内容:
#include"MyActor.h"
// Sets default values AMyActor::AMyActor() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true;
// Sets default values AMyActor::AMyActor() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true;
// Sets default values AMyActor::AMyActor() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true;
// Sets default values AMyActor::AMyActor() { // Set this actor to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true;
// Sets default values AMyPawn::AMyPawn() { // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true;
// Called when the game starts or when spawned voidAMyPawn::BeginPlay() { Super::BeginPlay(); }
// Called every frame voidAMyPawn::Tick(float DeltaTime) { Super::Tick(DeltaTime); }
// Called to bind functionality to input voidAMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent); }
编译。Create Blueprint class based on MyPawn。
开跑!
502-为自己的 Pawn 设置相机组件
修改 MyPawn.h,定义一个新的变量 class UCameraComponent* MyCamera;:
// Sets default values AMyPawn::AMyPawn() { // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true;
// Called when the game starts or when spawned voidAMyPawn::BeginPlay() { Super::BeginPlay();
}
// Called every frame voidAMyPawn::Tick(float DeltaTime) { Super::Tick(DeltaTime);
}
// Called to bind functionality to input voidAMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent);
}
开跑!
503-设置 GameMode 并自动持有 Pawn
对于 C++ Classes 下的 GameModeBase,创建游戏模式蓝图 Create Blueprint class based on ...。
在创建的蓝图中的 Class Defaults,将 Default Pawn Class 设置为 BP_MyPawn。
关卡中的 World Settings,设置好 GameMode Override。
BP_MyPawn 中设置好 Auto Possess Player 为 Player 0,或者直接修改 MyPawn.cpp,添加语句 AutoPossessPlayer = EAutoReceiveInput::Player0;:
// Sets default values AMyPawn::AMyPawn() { // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true;
// Called when the game starts or when spawned voidAMyPawn::BeginPlay() { Super::BeginPlay();
}
// Called every frame voidAMyPawn::Tick(float DeltaTime) { Super::Tick(DeltaTime);
}
// Called to bind functionality to input voidAMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent);
// Sets default values AMyPawn::AMyPawn() { // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true;
// Called when the game starts or when spawned voidAMyPawn::BeginPlay() { Super::BeginPlay();
}
// Called every frame voidAMyPawn::Tick(float DeltaTime) { Super::Tick(DeltaTime);
}
// Called to bind functionality to input voidAMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent);
// Sets default values AMyPawn::AMyPawn() { // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true;
// Called when the game starts or when spawned voidAMyPawn::BeginPlay() { Super::BeginPlay();
}
// Called every frame voidAMyPawn::Tick(float DeltaTime) { Super::Tick(DeltaTime); AddActorLocalOffset(Velocity * DeltaTime, true); }
// Called to bind functionality to input voidAMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent);
// Sets default values AMyPawn::AMyPawn() { // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true;
// Called when the game starts or when spawned voidAMyPawn::BeginPlay() { Super::BeginPlay();
}
// Called every frame voidAMyPawn::Tick(float DeltaTime) { Super::Tick(DeltaTime); AddActorLocalOffset(Velocity * DeltaTime, true); }
// Called to bind functionality to input voidAMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent);
// Sets default values AMyPawn::AMyPawn() { // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true;
// Called when the game starts or when spawned voidAMyPawn::BeginPlay() { Super::BeginPlay();
}
// Called every frame voidAMyPawn::Tick(float DeltaTime) { Super::Tick(DeltaTime); AddActorLocalOffset(Velocity * DeltaTime, true); }
// Called to bind functionality to input voidAMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent);
// Sets default values AMyPawn::AMyPawn() { // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true;
// Called when the game starts or when spawned voidAMyPawn::BeginPlay() { Super::BeginPlay();
}
// Called every frame voidAMyPawn::Tick(float DeltaTime) { Super::Tick(DeltaTime); AddActorLocalOffset(Velocity * DeltaTime, true); }
// Called to bind functionality to input voidAMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent);
// Sets default values AMyPawn::AMyPawn() { // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true;
// Called to bind functionality to input voidAMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent);
// Sets default values AMyPawn::AMyPawn() { // Set this pawn to call Tick() every frame. You can turn this off to improve performance if you don't need it. PrimaryActorTick.bCanEverTick = true;
// Called to bind functionality to input voidAMyPawn::SetupPlayerInputComponent(UInputComponent* PlayerInputComponent) { Super::SetupPlayerInputComponent(PlayerInputComponent);